package gvscanreader;


/**
 * Progetto dbsistemattack
 * Simulatore di attacchi da parte di minacce ad un sistema informatico
 * 
 * <copyright> gpl </copyright>
 * <author>Roberto Bertolotti</author>
 * <email>robeberto@gmail.com</email>
 * <date>2012-08-10</date>
 */

import java.sql.SQLException;
import java.util.ArrayList;

/**
 * interfaccia della connessione al database
 * @author bob
 */
public interface DBConnectorInterface {
    
   /**
     *  Apre la connessione con il Database
     */
   public boolean connect(); 
   
   
   /**
    *  Chiude la connessione con il Database
    */
   public void disconnect();
   
    /**
    * Esegue una query di selezione dati sul Database
    * query: una stringa che rappresenta un'istruzione SQL di tipo SELECT da eseguire
    * ritorna un ArrayList contenente tutte le tuple del risultato
    * @param nomeTabella nome della tabella su cui si vuole eseguire la query
    * @param campo nome del campo di cui si è interessati ad ottenere il valore (* indica tutti i campi)
    * @param condizione condizione che deve soddisfare la query. Può essere null
    * @param groupBy nome dei campi sui quali si vuole raggruppare. Può essere null
    * @return
    * @throws SQLException 
    */
   public ArrayList query(String nomeTabella, String campo, String condizione, String groupBy ) throws SQLException;
   
     /**
    * Esegue una query di selezione dati sul Database
    * query: una stringa che rappresenta un'istruzione SQL di tipo SELECT da eseguire
    * ritorna un ArrayList contenente tutte le tuple del risultato
    * @param nomeTabella nome della tabella su cui si vuole eseguire la query
    * @param campo nome del campo di cui si è interessati ad ottenere il valore (* indica tutti i campi)
    * @param condizione condizione che deve soddisfare la query. Può essere null
    * @return
    * @throws SQLException 
    */
   public ArrayList query(String nomeTabella, String campo, String condizione) throws SQLException;
   
     /**
    * Esegue un inserimento nel database.
    * @param nomeTabella nome della tabella 
    * @param campo nome dei campi in cui si vuole inserire
    * @param valore valore dei campi in cui si vuole inserire
    * @return
    * @throws SQLException 
    */
   public boolean insert(String nomeTabella, String campo, String valore) throws SQLException;
   
    /**
    * Aggiorna un elemento del database.
    * @param nomeTabella nome della tabella
    * @param campo nome del campo che si vuole aggiornare
    * @param valore valore del campo che si vuole aggiornare
    * @param condizione condizione della query. Può essere null
    * @return
    * @throws SQLException 
    */
   public boolean update(String nomeTabella, String campo, String valore, String condizione) throws SQLException;
   
     /**
    * Elimina righe dal database.
    * @param nomeTabella
    * @param campo
    * @param valore
    * @return
    * @throws SQLException 
    */
   public boolean delete(String nomeTabella) throws SQLException;
   
      /**
    * Elimina righe dal database.
    * @param nomeTabella
    * @return
    * @throws SQLException 
    */
   public boolean delete(String nomeTabella, String campo, String valore) throws SQLException;
   
    /**
    * Elimina righe dal database.
    * Produce il comando SQL: "DELETE FROM "+nomeTabella+" WHERE "+condizione
    * @param nomeTabella
    * @param condizione
    * @return
    * @throws SQLException 
    */
   public boolean delete(String nomeTabella, String condizione) throws SQLException;
   
     /**
     * Ritorna TRUE se la connessione con il Database è attiva
     * @return 
     */
   //public boolean isConnected() { return connesso; }   // Ritorna TRUE se la connessione con il Database è attiva
   
      /**
    * Ritorna il messaggio d'errore dell'ultima eccezione sollevata
    * @return 
    */
   //public String getErrore() { return errore; }       // Ritorna il messaggio d'errore dell'ultima eccezione sollevata

       /**
    * Ritorna il numero degli elementi di una tabella 
    * @param nomeTabella
    * @return 
    */
    public int countElement(String nomeTabella);
    
        
    /**
     * Ritorna il massimo tra gli id del campo della tabella e 0. -1 in caso di errore.
     * @param campo colonna contente tipo integer
     * @param nomeTabella
     * @return 
     */
    public int getMaxId( String nomeTabella, String campo);
    
        /**
     * Ritorna true se l'elemento value esiste
     * @param nomeTabella
     * @param campo
     * @param value
     * @return 
     */
    public boolean existElement (String nomeTabella, String campo, String value);
    
         /**
      * Ritorna true se la tabella ha almeno un elemento che rispetta la condizione.
      * @param nomeTabella
      * @param condition
      * @return 
      */
    public boolean existElement (String nomeTabella, String condizione);

    /**
    * Ritorna il numero degli elementi di una tabella data una condizione
    * @param nomeTabella
    * @return 
    */
    public int countElement(String tabSimulazione, String string);

    
}
   